// Agent basis in project massimEcomp

/* Initial beliefs and rules */
/* BELIEFS */


/* RULES */


/* initial DESIRES */
!search_corral.


/* INTENTIONS (PLANS AND ACTIONS) */
+!find_pos : true
	<- 	.wait("+pos(_,_,_)").
	
+!find_corral : true
	<- 	.wait("+corral(_,_,_,_)");
		.print("tenho a posicao do corral!").
		
+!search_corral: not pos(_,_,_)
	<-	!find_pos;
		!search_corral.
 	
+!search_corral: pos(_,_,_) & not corral(_,_,_,_)
	<-	!find_corral;
		!search_corral.
		
+!search_corral: pos(_,_,_) & corral(_,_,_,_)
	<-	!goto_corral.
	 	 
+!goto_corral: pos(X,Y,_) & corral(_,_,CX,CY) & not switch(_,_,_)
	<-	.print("goto corral!");
		br.poli.ecomp.sma.massim.action.FindPos(X,Y,CX,CY,NewX,NewY);
     	br.poli.ecomp.sma.massim.action.FindDirection(X,Y,NewX,NewY,Direction);
     	moveTo(Direction);
     	.wait("+pos(_,_,_)");
     	!goto_corral.
     	
+!goto_corral: pos(X,Y,_) & corral(_,_,CX,CY) & switch(S,SX,SY)
	<-	if(S == corral){
			.print("Encontrei o switch!!!");
			+target(SX,SY);
			!move;
		}else{
			br.poli.ecomp.sma.massim.action.FindPos(X,Y,CX,CY,NewX,NewY);
     		br.poli.ecomp.sma.massim.action.FindDirection(X,Y,NewX,NewY,Direction);
     		moveTo(Direction);
     		.wait("+pos(_,_,_)");
			!goto_corral;
		}
     	.
  
+!move : pos(X,Y,_) & target(Cx,Cy) & Cx \== X & Cy \== Y
	<- 	.print("move to target");
  	 	br.poli.ecomp.sma.massim.action.FindPos(X,Y,Cx,Cy,NewX,NewY);
     	br.poli.ecomp.sma.massim.action.FindDirection(X,Y,NewX,NewY,Direction);
     	.print(Direction);
     	moveTo(Direction);
     	!move.

+!move : pos(X,Y,_) & target(Cx,Cy) & (Cx == X + 1 & Cy == Y | Cx == X - 1 & Cy == Y  | Cy == Y + 1 & Cx == X | Cy == Y - 1 & Cx == X)
	<- 	.print("No switch!");
     	-target(Cx,Cy);
     	.wait("open_corral()");
     	!open.
     	
+!open : open_corral(S) & fence(_,_,F)
	<-	if(S == true & F == close){
			.print("abrir corral!"); //definir ainda.
			//
			-open_corral(S);
		} else{
			.print("fechar corral!"); //definir ainda.
			-open_corral(S);
		}
		.wait("open_corral()").
 